home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.92 / crossfir / crossfire-0.92.5 / server / c_move.c < prev    next >
C/C++ Source or Header  |  1996-07-24  |  4KB  |  157 lines

  1. /*
  2.  * Movement commands
  3.  *    ++Jam
  4.  */
  5.  
  6. #include <global.h>
  7. #include <sproto.h>
  8. #include <skills.h>
  9.  
  10. static int move_internal (object *op, char *params, int dir)
  11. {
  12.   if (params) {
  13.     if (params[0] == 'f') {
  14.       if (!op->contr->fire_on) {
  15.     op->contr->fire_on =1;
  16.     move_player(op, dir);
  17.     op->contr->fire_on =0;
  18.     return 0;
  19.       }
  20.     } else if (params[0] == 'r' && !op->contr->run_on)
  21.       op->contr->run_on =1;
  22.   }
  23.   move_player(op, dir);
  24.   return 0;
  25. }
  26.  
  27. int command_east (object *op, char *params)
  28. {
  29.   return move_internal(op, params, 3);
  30. }
  31.  
  32. int command_north (object *op, char *params)
  33. {
  34.   return move_internal(op, params, 1);
  35. }
  36.  
  37. int command_northeast (object *op, char *params)
  38. {
  39.   return move_internal(op, params, 2);
  40. }
  41.  
  42. int command_northwest (object *op, char *params)
  43. {
  44.   return move_internal(op, params, 8);
  45. }
  46.  
  47. int command_south (object *op, char *params)
  48. {
  49.   return move_internal(op, params, 5);
  50. }
  51.  
  52. int command_southeast (object *op, char *params)
  53. {
  54.   return move_internal(op, params, 4);
  55. }
  56.  
  57. int command_southwest (object *op, char *params)
  58. {
  59.   return move_internal(op, params, 6);
  60. }
  61.  
  62. int command_west (object *op, char *params)
  63. {
  64.   return move_internal(op, params, 7);
  65. }
  66.  
  67. int command_stay (object *op, char *params)
  68. {
  69.   if (!op->contr->fire_on && (!params || params[0] != 'f'))
  70.     return 0;
  71.   fire(op, 0);
  72.   return 0;
  73. }
  74.  
  75.  
  76. /*  peterm:  command_search finds runes.  It uses:
  77.            trap_see uses various rules to determine whether
  78.                    the trap is seen or not.  It informs op if
  79.                    a trap is found.
  80.        trap_show(object *trap, object *where) briefly shows up the trap, 
  81.         as if it detonated.  This is just to inform the player of where the trap
  82.             is:  it might be hidden underneath something.
  83.   It searches both around the player--9 squares counting the one he's on
  84.   and the inventories of all the objects around him for traps.  (Including his own!!  Hmmm.)
  85.  
  86. */
  87.  
  88. int command_search (object *op, char *params) {  
  89. #ifndef ALLOW_SKILLS
  90.    object *tmp,*tmp2;
  91.    int i;
  92.   /*First we search all around us for runes and traps, which are
  93.     all type RUNE */
  94.    for(i=0;i<9;i++) { 
  95.     /*  Check everything in the square for trapness */
  96.     if(out_of_map(op->map,op->x + freearr_x[i],op->y + freearr_y[i])) continue;
  97.     for(tmp = get_map_ob(op->map, op->x + freearr_x[i], op->y +freearr_y[i]);
  98.         tmp!=NULL;tmp=tmp->above) 
  99.       {
  100.         /*  And now we'd better do an inventory traversal of each
  101.             of these objects' inventory */
  102.         for(tmp2=tmp->inv;tmp2!=NULL;tmp2=tmp2->below) 
  103.         if(tmp2->type==RUNE) { if(trap_see(op,tmp2)) trap_show(tmp2,tmp); }
  104.         if(tmp->type==RUNE) { if(trap_see(op,tmp)) trap_show(tmp,tmp);}
  105.         }
  106.    }
  107.   return 0;
  108. #else    /* ALLOW_SKILLS */ 
  109.    if(!change_skill(op,SK_FIND_TRAPS))
  110.         return 0;
  111.    else {
  112.         int success = do_skill(op,0,NULL);
  113.         return success;
  114.    }
  115. #endif /* ALLOW_SKILLS */ 
  116. }
  117.  
  118. int command_disarm (object *op, char *params) {
  119. #ifndef ALLOW_SKILLS
  120.   object *tmp,*tmp2;
  121.   int i;
  122.  
  123.   /*First we search all around us for runes and traps, which are
  124.     all type RUNE */
  125.    for(i=0;i<9;i++) { 
  126.         if(out_of_map(op->map,op->x + freearr_x[i],op->y + freearr_y[i])) continue;
  127.     /*  Check everything in the square for trapness */
  128.     for(tmp = get_map_ob(op->map, op->x + freearr_x[i], op->y +freearr_y[i]);
  129.         tmp!=NULL;tmp=tmp->above) 
  130.       {
  131.         /*  And now we'd better do an inventory traversal of each
  132.             of these objects' inventory */
  133.         for(tmp2=tmp->inv;tmp2!=NULL;tmp2=tmp2->below) 
  134.         if(tmp2->type==RUNE&&tmp2->stats.Cha<=1) { 
  135.             trap_show(tmp2,tmp); 
  136.             return trap_disarm(op,tmp2,1);
  137.         }
  138.         if(tmp->type==RUNE&&tmp->stats.Cha<=1) { 
  139.         trap_show(tmp,tmp);
  140.         return trap_disarm(op,tmp,1);
  141.         }
  142.       }
  143.    }
  144.  
  145. return 0;
  146. #else
  147.    if(!change_skill(op,SK_REMOVE_TRAP)) 
  148.         return 0;
  149.    else {
  150.         int success = do_skill(op,0,NULL); 
  151.         return success;
  152.    }
  153. #endif
  154. }
  155.  
  156.   
  157.